#include <iostream>
#include <string.h>
#include <map>
#include <iomanip>
#include <functional>
using namespace std;

int mc1 = -0x3f3f3f3f, mc2 = -0x3f3f3f3f; // 被除数与除数的最高次数
double _dived[10010];                     // 被除数
double _div[10010];                       // 除数
double _ans[10010];                       // 商
double _rem[10010];                       // 余数
map<int, double, greater<int>> mp;        // 保存打印部分，从高次向低次打印

// 看四舍五入剩一位小数后会不会为0.0
bool tozero(double d)
{
    if (d > 0)
    {
        return (d + 0.05) < 0.1;
    }
    return (d - 0.05) > -0.1;
}

void cul()
{
    if (mc1 < mc2)
    {
        return;
    }
    int ci = mc1 - mc2;                  // 此次计算的商的指数
    double xi = _dived[mc1] / _div[mc2]; // 商的该指数的系数，同时是要减去的数的倍数
    _ans[ci] = xi;                       // 保存到结果多项式
    _dived[mc1] = 0;                     // 最高次系数被消去
    // 减去除数乘倍数得到的多项式
    int pos = mc2;
    while (--pos >= 0) // 从除数第二高次数开始（最高那个会被消掉，就是0）
    {
        if (_div[pos] != 0) // 找到除数的有效次数
        {
            // 该次数系数不为0，要计算
            _dived[pos + ci] -= (_div[pos] * xi); // pos+ci得到减数的次数
        }
    }
    memcpy(_rem, _dived, 10010); // 下一个被除数是上一个计算的余数
    mc1--;                       // 被除数次数降一
    cul();
}

void myprint(double arr[])
{
    map<int, double, greater<int>>().swap(mp); // 每次置零
    int cnt = 0;
    for (int i = 0; i < 10010; i++)
    {
        if (tozero(arr[i]))
        {
            arr[i] = 0.0;
        }
        if (arr[i] != 0)
        {
            cnt++;
            mp[i] = arr[i];
        }
    }
    cout << cnt;
    if (cnt == 0)
    {
        cout << " 0 0.0" << endl;
        return;
    }
    for (map<int, double>::iterator it = mp.begin(); it != mp.end(); it++)
    {
        cout << " " << it->first << " " << fixed << setprecision(1) << it->second;
    }
    cout << endl;
}

int main()
{
    int ci;
    double xi;
    int cnt;
    cin >> cnt;
    while (cnt--)
    {
        cin >> ci >> xi;
        mc1 = max(mc1, ci);
        _dived[ci] = xi;
    }
    cin >> cnt;
    while (cnt--)
    {
        cin >> ci >> xi;
        mc2 = max(mc2, ci);
        _div[ci] = xi;
    }
    memcpy(_rem, _dived, 10010); // 先初始化，如果没进下面的if余数也有初始化
    if (mc1 >= mc2)
    {
        cul();
    }
    myprint(_ans);
    myprint(_rem);
    return 0;
}